using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;


namespace Tetris_AntiGravity
{
    /// <summary>
    /// This is a game component that implements IUpdateable.
    /// </summary>
    public class JugadorManager : Microsoft.Xna.Framework.DrawableGameComponent
    {
        //variables que manejan los jugadores
        private Jugador jugador1;
        private Jugador jugador2;

        //Variable para el manejo del frameRate
        int incrementoTiempo = 0;
        private const int targetFrameRate = 30;

        SpriteFont scoreFont;

        KeyboardState tecladoViejo;


        
        public JugadorManager(Game game)
            : base(game)
        {
            // TODO: Construct any child components here
        }

        /// <summary>
        /// Allows the game component to perform any initialization it needs to before starting
        /// to run.  This is where it can query for any required services and load content.
        /// </summary>
        public override void Initialize()
        {
            jugador1 = new Jugador(new Vector2(50,90), this.Game);
            jugador2 = new Jugador(new Vector2(835, 90), this.Game);
            scoreFont = Game.Content.Load<SpriteFont>(@"fuentes\letra");
            tecladoViejo = Keyboard.GetState();
            base.Initialize();
        }

        /// <summary>
        /// Allows the game component to update itself.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        public override void Update(GameTime gameTime)
        {
            if (!jugador1.perdio && !jugador2.perdio)
            {
                incrementoTiempo += gameTime.ElapsedGameTime.Milliseconds;
                KeyboardState teclado = Keyboard.GetState();

                if (incrementoTiempo > 1000 / 5)
                {
                    if (teclado.IsKeyDown(Keys.Down))
                    {
                        jugador2.rotarFicha();
                        //rotoJ1=rotador
                    }

                    if (teclado.IsKeyDown(Keys.S))
                        jugador1.rotarFicha();

                    if (teclado.IsKeyDown(Keys.Right))
                        jugador2.moverDerecha();

                    if (teclado.IsKeyDown(Keys.D))
                        jugador1.moverDerecha();

                    if (teclado.IsKeyDown(Keys.Left))
                        jugador2.moverIzquierda();

                    if (teclado.IsKeyDown(Keys.A))
                        jugador1.moverIzquierda();

                    if (teclado.IsKeyDown(Keys.Up))
                        jugador2.subir();

                    if (teclado.IsKeyDown(Keys.W))
                        jugador1.subir();

                    if (teclado.IsKeyDown(Keys.PageUp))
                    {
                        if (jugador2.sumaLineas > 0)
                        {
                            jugador1.agregarLinea();
                            jugador2.sumaLineas--;
                        }
                    }

                    if (teclado.IsKeyDown(Keys.U))
                    {
                        if (jugador1.sumaLineas > 0)
                        {
                            jugador2.agregarLinea();
                            jugador1.sumaLineas--;
                        }
                    }


                    if (teclado.IsKeyDown(Keys.PageDown))
                    {
                        if (jugador2.sumaLineas > 0)
                        {
                            jugador2.eliminarLinea();
                            jugador2.sumaLineas--;
                        }
                    }

                    if (teclado.IsKeyDown(Keys.J))
                    {
                        if (jugador1.sumaLineas > 0)
                        {
                            jugador1.eliminarLinea();
                            jugador1.sumaLineas--;
                        }
                    }

                    if (teclado.IsKeyDown(Keys.Home))
                    {
                        if (jugador2.tornado > 0)
                        {
                            jugador1.lanzarTornado();
                            jugador2.tornado--;
                        }
                    }

                    if (teclado.IsKeyDown(Keys.Y))
                    {
                        if (jugador1.tornado > 0)
                        {
                            jugador2.lanzarTornado();
                            jugador1.tornado--;
                        }
                    }


                    if (teclado.IsKeyDown(Keys.End))
                    {
                        if (jugador2.bombas > 0)
                        {
                            jugador1.lanzarGranada();
                            jugador2.bombas--;
                        }
                    }

                    if (teclado.IsKeyDown(Keys.H))
                    {
                        if (jugador1.bombas > 0)
                        {
                            jugador2.lanzarGranada();
                            jugador1.bombas--;
                        }
                    }


                    incrementoTiempo = 0;
                }

                jugador1.update(gameTime);
                jugador2.update(gameTime);
                base.Update(gameTime);
            }
        }

        public override void Draw(GameTime gameTime) {
            SpriteBatch spriteBatch=new SpriteBatch(Game.GraphicsDevice);
            spriteBatch.Begin();
            jugador1.Draw(gameTime, spriteBatch, Game.GraphicsDevice);
            jugador2.Draw(gameTime, spriteBatch, Game.GraphicsDevice);
            spriteBatch.DrawString(scoreFont, "" + jugador1.puntaje, new Vector2(190, 678), Color.Black, 0, Vector2.Zero, 1.5f, SpriteEffects.None, 1);
            spriteBatch.DrawString(scoreFont, "" + jugador2.puntaje, new Vector2(980, 678), Color.Black, 0, Vector2.Zero, 1.5f, SpriteEffects.None, 1);
            spriteBatch.DrawString(scoreFont, "" + jugador1.bombas, new Vector2(535, 323), Color.Black, 0, Vector2.Zero, 1.5f, SpriteEffects.None, 1);
            spriteBatch.DrawString(scoreFont, "" + jugador2.bombas, new Vector2(696, 323), Color.Black, 0, Vector2.Zero, 1.5f, SpriteEffects.None, 1);
            spriteBatch.DrawString(scoreFont, "" + jugador1.tornado, new Vector2(535, 435), Color.Black, 0, Vector2.Zero, 1.5f, SpriteEffects.None, 1);
            spriteBatch.DrawString(scoreFont, "" + jugador2.tornado, new Vector2(696, 435), Color.Black, 0, Vector2.Zero, 1.5f, SpriteEffects.None, 1);
            spriteBatch.DrawString(scoreFont, "" + jugador1.sumaLineas, new Vector2(535, 548), Color.Black, 0, Vector2.Zero, 1.5f, SpriteEffects.None, 1);
            //spriteBatch.DrawString(scoreFont, "" + incrementoTiempo, new Vector2(515, 543), Color.Black, 0, Vector2.Zero, 1.5f, SpriteEffects.None, 1);
            spriteBatch.DrawString(scoreFont, "" + jugador2.sumaLineas, new Vector2(696, 548), Color.Black, 0, Vector2.Zero, 1.5f, SpriteEffects.None, 1);
            spriteBatch.End();
            
        }
    }
}
